import org.springframework.boot.context.properties.ConfigurationProperties

/**
 * SwaggerProperties
 *
 * @author: lengleng
 * @date: 2018/7/25  14:00
 */
@ConfigurationProperties("swagger")
data class SwaggerConfigProperties(
        /**
         * 是否开启swagger
         */
        val enabled: Boolean = true,

        /**
         * swagger会解析的包路径
         */
        var basePackage: String? = "",

        /**
         * swagger会解析的url规则
         */
        val basePath: List<String> = ArrayList(),

        /**
         * 在basePath基础上需要排除的url规则
         */
        var excludePath: ArrayList<String> = ArrayList(),

        /**
         * 标题
         */
        val title: String = "",

        /**
         * 描述
         */
        val description: String = "",

        /**
         * 版本
         */
        val version: String = "",

        /**
         * 许可证
         */
        val license: String = "",

        /**
         * 许可证URL
         */
        val licenseUrl: String = "",

        /**
         * 服务条款URL
         */
        val termsOfServiceUrl: String = "",

        /**
         * host信息
         */
        val host: String = "",

        /**
         * 联系人信息
         */
        val contact: Contact = Contact(),

        /**
         * 全局统一鉴权配置
         */
        val authorization: Authorization = Authorization()
)

data class Contact(
        /**
         * 联系人
         */
        val name: String = "",

        /**
         * 联系人url
         */
        val url: String = "",

        /**
         * 联系人email
         */
        val email: String = ""
)

data class Authorization(
        /**
         * 鉴权策略ID，需要和SecurityReferences ID保持一致
         */
        val name: String = "",

        /**
         * 需要开启鉴权URL的正则
         */
        val authRegex: String = "^.*$",

        /**
         * 鉴权作用域列表
         */
        val authorizationScopeList: List<AuthorizationScope> = ArrayList(),
        val tokenUrlList: List<String> = ArrayList()
)

data class AuthorizationScope(
        /**
         * 作用域名称
         */
        val scope: String = "",

        /**
         * 作用域描述
         */
        val description: String = ""
)